0

行ごとに読みたい 5000 行のテキスト ドキュメントがあります。列数に応じて、各行を別のテキスト ファイルに書き込みたいと考えています。各列は、「|」で区切られた で区切られています。これを行う最速の方法は何ですか?

編集: 各ファイルにはセクションがあり、各セクションは @、#、または $ で区切られているという重要な詳細を忘れていました。各行も適切なセクションに出力する必要があります

例:

cat File.txt

@
01|02|03|04|05|06|07|08|09|10
11|12|13|14|15|16|17|18
21|22|23|24|25
31|32|33|34|35|36|37|38|39|40
#
41|42|43|44|45|46|47|48|49|50
51|52|53|54|55
61|62|63|64|65|66|67|68
71|72|73|74|75|76|77|78|79|80

出力 (例: 3 ファイル)

cat Ten.txt

@
01|02|03|04|05|06|07|08|09|10
31|32|33|34|35|36|37|38|39|40
#
41|42|43|44|45|46|47|48|49|50
71|72|73|74|75|76|77|78|79|80

 

cat Eight.txt 
@
11|12|13|14|15|16|17|18
#
61|62|63|64|65|66|67|68

  

cat Five.txt
@
21|22|23|24|25
#
51|52|53|54|55
4

4 に答える 4

2

これに沿った何かがうまくいくかもしれません:

awk -F\| '{ print > "columns-" + NF + ".dat"}' File.txt

columns-10.dat数字を英語に翻訳しませんが、たとえば10列の行の場合などの名前のファイルに各行を書き込みます...

于 2012-11-09T20:33:28.357 に答える
0
  • 使用するawk
  • 区切り文字を設定する
  • 列番号がN以上の行を印刷します。

例えば:

$> awk -F "|" '{if (NF >= 10) {print}}' File.txt
01|02|03|04|05|06|07|08|09|10
于 2012-11-09T20:33:26.083 に答える
0

awkこれは、10列のすべての行を検索するためのワンライナーです。

awk -F'|' '{if (NF==10) {print $0} }'

より一般的には:

#!/bin/bash

awk -F'|' -v cols=$1 '{if (NF==cols) {print $0} }'
于 2012-11-09T20:33:32.877 に答える
0

infile.txt:

@
01|02|03|04|05|06|07|08|09|10
11|12|13|14|15|16|17|18
21|22|23|24|25
31|32|33|34|35|36|37|38|39|40
#
41|42|43|44|45|46|47|48|49|50
51|52|53|54|55
61|62|63|64|65|66|67|68
71|72|73|74|75|76|77|78|79|80
$
41|42|43|44|45|46|47|48|49|90

長い Awk ワンライナー (おそらく不必要に長い):

awk -F "|" '{if ($0 == "@") {print $0} else {;if ($0 == "\#") {print $0} else {;if (NF == 10) {print $0};}}}' infile.txt > tens.txt

tens.txt

@
01|02|03|04|05|06|07|08|09|10
31|32|33|34|35|36|37|38|39|40
#
41|42|43|44|45|46|47|48|49|50
71|72|73|74|75|76|77|78|79|80
$
41|42|43|44|45|46|47|48|49|90

(NF == 10)次に、実行するたびに句を必要なものに変更します。

于 2012-11-09T23:09:56.617 に答える