6

構造を持つファイルがあります

12312
desc: bleh...
9938
desc: blah...
desc: bloh...
desc: blih...
desc: bluh...
9912
desc: blah...

パターン "desc:" に一致する行を前の行に移動するか、すべてのパターン "desc:" の前にある行の '\n' を削除します。

望ましい出力:

12312 desc: bleh...
9938 desc: blah... desc: bloh... desc: blih... desc: bluh... 
9912 desc: blah...

私はもう試した

awk '!/desc:/{
 printf "%s ",$0
 getline
 printf "%s \n",$0
}
/desc/{print}' file

結果なし。

実際、すべてのデータはawk -F\" '{print $4 "\t" $6}' 多分私が最初に何かをすることができるの出力です?

4

6 に答える 6

13

片道awk:

$ awk '!/^desc:/&&NR>1{print OFS}{printf "%s ",$0}END{print OFS}' file
12312 desc: bleh...
9938 desc: blah... desc: bloh... desc: blih... desc: bluh...
9912 desc: blah...

説明:

  • !/^desc:/desc:ファイルの最初の行を含めずに開始しない行に一致しますNR>1
  • {print OFS}一致した行の前に出力フィールドセパレーターを出力します。awkデフォルトではOFSです\n
  • {printf "%s ",$0}末尾の改行なしですべての行を印刷します。
  • END{print OFS}ファイルが読み取られた後、末尾に改行を追加します。

ライブデモ: http://ideone.com/ajH14u

于 2013-06-10T10:35:52.943 に答える
13

sed一発ギャグ

sed ':a $!N;s/\ndesc/ desc/;ta P;D'

出力します

12312 desc: bleh...
9938 desc: blah... desc: bloh... desc: blih... desc: bluh...
9912 desc: blah...
于 2013-06-10T10:52:27.307 に答える
4
$ cat file
12312
desc: bleh...
9938
desc: blah...
desc: bloh...
desc: blih...
desc: bluh...
9912
desc: blah...

$ awk '{printf "%s%s",(/^desc:/?OFS:ors),$0; ors=ORS} END{print ""}' file
12312 desc: bleh...
9938 desc: blah... desc: bloh... desc: blih... desc: bluh...
9912 desc: blah...
于 2013-06-10T12:45:12.950 に答える
1

使用

の内容script.vim:

set backup
g/\v^desc/ normal kJ
saveas! output.txt
q!

次のように実行します。

vim -u NONE -N -S script.vim infile

そしてoutput.txt、コンテンツを含むファイルを作成します:

12312 desc: bleh...
9938 desc: blah...  desc: bloh...  desc: blih...  desc: bluh...
9912 desc: blah...
于 2013-06-10T11:07:57.887 に答える