何時間もこれをやろうとしました。
このデータを含むファイルがあります。これを data1 と呼びます。
test1,test2,test3
そのデータ行の末尾に数とカンマを追加したいと思います。 data1の行数、つまり1行を数えているとしましょう。
echo ", $(wc -l < data1 | bc)"
私の出力は次のとおりです。
test1,test2,test3,1
私はecho、printf、some awk(まだ理解していない)、catを試してみました。
答え1
awkを使う
awk '{$0=$0","NR}1' data1
答え2
POSIXファイルを想定すると、目的のecho "$(head -c-1 data1)","$(wc -l <data1)"
内容が出力されます。head
末尾の改行を削除します。
答え3
sed を使用して最後の行に数字を追加します。
STRING=`echo "$(wc -l < data1 | bc)"` && sed -i '$s/^\(.*\)$/\1,'"$STRING"'/' data1
$ cat data1
test1,test2,test3,1
最初の部分は行番号を変数に格納しSTRING
、sedは最後の行を取得し、変数,
の内容を行$STRING
の末尾に追加します。
答え4
このpaste
コマンドは列を追加するために使用されます。
$ wc -l <data1 | paste -d, file -
test1,test2,test3, 1
これは文字通り要求された内容はwc
ファイル行の末尾に追加されます。出力のwc
行の先頭にスペースがあるので、ここでスペースを取得します。
このスペースを削除するには:
$ wc -l <data1 | sed 's/^ *//' | paste -d, file -
test1,test2,test3,1
paste
ここで使用されているコマンドは、-d,
古い列と新しい列の間にコンマを挿入するようにします。この-
信号は、ファイルの代わりに標準入力から新しい列を読み取る必要があることを示します。標準入力は、wc -l
ファイルの行数を計算することによって提供されます。
バリアントは出力を取得し、行のsed
先頭wc
のすべての空白文字を削除します。
bash
プロセス代替の使用:
paste -d, file <( wc -l <data1 | sed 's/^ *//' )
ここで、プロセス置換は を<( ... )
置き換えます-
。