入力.txt
EN1
EN2
EN3
EN4
EN5
出力
EN1,EN2,EN3,EN4,EN5
私はawkを試しました。しかし、カンマで印刷されません。
awk 'BEGIN { OFS = ","} { printf $1}' input.txt
GNU Awkバージョン4.0.0があります。
答え1
awk 'BEGIN{ORS=","}1' input.txt
次を生成します。
EN1,EN2,EN3,EN4,EN5,
だからはいカンマで印刷します(したがって、これが起こらないという記事のコメントを理解したかどうかわかりません)。しかし、末尾のコンマが問題のようです。
GNU Awk 3.1.7でテストされました。
答え2
私も古い話題を知っていますが、拒否できませんでした。ここに別の短くて簡単な方法があります。
$ paste -sd, input.txt
EN1,EN2,EN3,EN4,EN5
$
LinuxとSolarisはもちろん、他のプラットフォームでも動作します。
答え3
tr
この場合に使用できます。
tr '\n' ',' <input.txt
また、最後の改行文字をカンマで置き換えます。これを防ぐために、Linuxで入力ファイルが改行で終わることを知っている場合:
<input.txt head -c -1 | tr '\n' ,
; echo
出力を改行文字で終了するには、追加します。
あるいは、シェルに末尾のカンマ(存在する場合)を削除させることもできます。
columns=$(<input.txt tr '\n' ',')
echo "${columns%,}"
答え4
行末にカンマを印刷しない方法:
{printf("%s", NR == 1 ? $0 : ","$0);} END {printf("\n");} file
説明する
最初の行(NR == 1
)が表示されたら、印刷してください。それ以外の場合は、カンマと行が引数として送信されますprintf
。
このソリューションでは、次の三項AWK
演算子を使用します。?:
NR == 1 ? $0 : ","$0
NR
変数が等しい場合は1
最初の行を引数として送信しprintf
、そうでない場合は現在の行に関連付けられているコンマを送信します。