0

入力の各行を角かっこで囲みます。最初の角かっこを追加できます。しかし、エンディングではありません。末尾の「]」は次の行に移動し、行をクリップします。

例 - これが私のスクリプトです -

cat file.csv | awk 'BEGIN {FS=","; OFS=","} {print $1,"["$6,$7"]"}'

op は - ]ABC,[CD,EF

ありがとう

4

2 に答える 2

3

これは、行末の問題である可能性があります。行は、それ自体CR/LFではなく(キャリッジリターンとラインフィード)で終了LFしているためです。実際に出力されているのは次のとおりです。

ABC,[CD,EF<CR>]

そして、最後の文字CRを出力する前に、カーソルを強制的に行頭に戻しています。]

同様の効果が次のように表示されます。

pax> awk -v x='abcdef^M' 'END {print "123 ["x"]"}' </dev/null
]23 [abcdef

ここで、^Mは実際には文字であり、CR, で入力します。CTRL-VCTRL-M

それを修正する方法については、ファイル自体を修正して危険な行末を取り除くかgsub、行の最後のフィールドで次のようなものを使用してCR文字を取り除くことができます。

pax> # this bit here ----------vvvvvvvvvvvvvvvv
pax> awk -v x='abcdef^M' 'END {gsub("^M","",x);print "123 ["x"]"}' </dev/null
123 [abcdef]

あなたの場合、それは次のようになります。

awk 'BEGIN {FS=","; OFS=","} {gsub("^M","",$7);print $1,"["$6,$7"]"}' file.csv

ファイル名自体を完全に処理できるcat file.csv |ため、ここではまったく不要であることに注意してください。awk私自身、可能であればファイルを修正したいと思います。

上記のファイルを修正する方法は多数あります (使用できるツールによって異なります) 。この優れた回答を参照してください。

于 2013-09-16T09:09:26.350 に答える
1

コードは適切な入力で動作します。例:

$ echo {A..J} | sed 's/ /,/g' | awk 'BEGIN {FS=","; OFS=","} {print $1,"["$6,$7"]"}'
A,[F,G]

強力な@paxdiabloが言うように、おそらく行末の問題です。file- コマンドで確認

適切な行末に変換するには、egfromdosまたはdos2unix

于 2013-09-16T09:13:19.683 に答える