awk printfの予期しない出力

awk printfの予期しない出力

次のCSVファイルがあります。

$ cat mycsv.csv 
"1/30/2017 11:14:55 AM","I","M","k6.0.1","E","jim","JimK","JIM","[email protected]","A","6.0.12”,”A”,”N”  
"1/30/2017 11:14:55 AM","I","M","k6.0.1","E","jim","JimK","JIM","[email protected]","A","6.0.12”,”A”,”N”  
"1/30/2017 11:14:55 AM","I","M","k6.0.1","E","jim","JimK","JIM","[email protected]","A","6.0.12”,”A”,”N”  

次はなぜすべての行を印刷しないのですか?

$awk -F "," '{printf}' mycsv.csv    
 ","M","k6.0.1","E","jim","JimK","JIM","[email protected]","A","6.0.12”,”A”,”N””  

$awk -F "," '{printf $0}' mycsv.csv 
 ","M","k6.0.1","E","jim","JimK","JIM","[email protected]","A","6.0.12”,”A”,”N””  

両方ともすべての行を印刷する必要があります。そうですか?私は何が間違っていましたか?

答え1

printfCprintf()またはprintfユーティリティまたはawk'の最初の引数には1がprintf()必要です。滞在

あなたが望むもの:

awk '{printf "%s", $0}'

ここで。レコード区切り文字を出力する必要がない場合は、次のこともできます。

awk -v ORS= '{print}' < mycsv.csv

でも:

awk -v ORS= 1 < mycsv.csv

{print}これは基本的な作業です。本物デフォルト条件ですが、少なくとも1つのジョブまたは条件を指定する必要があります1本物)。

しかし、ここではtr十分です。

tr -d '\n' < mycsv.csv

それともまだ欲しいなら一つ出力がまだテキストになるように末尾の改行:

paste -sd '\0' mycsv.csv

ファイルにはMicrosoftスタイルのCRLF行区切り文字も含まれているため、CR文字も削除することをお勧めします。

tr -d '\r\n' < mycsv.csv

awkまたは、複数の単一文字実装をサポートするCRLFシーケンスを使用してくださいRS(macOSを含むgawk)。mawkawk

awk -v RS='\r\n' -v ORS= 1 < mycsv.csv

または:

awk -v RS='\r?\n' -n ORS= 1 < mycsv.csv

つまり、\rUnix または MS-DOS 行区切り文字を処理することを選択できます。

dos2unixまたは、最初または同じものを使用してd2uファイルをUnix形式に変換します。

ノート

フォーマットパラメータは1つprintf必要です。awk公共施設の標準仕様。入力gawkしてmawk省略するとエラーが発生します。busybox awk元の実装(onなど)から派生したものとprintf ""同じです(まだ形式と見なされ、文字が含まれているとエラーが発生するため、あまり役に立ちません)。awkmacOSprintf $0$0%

関連情報