他のファイルの行末にファイルまたはコマンドを追加します。

他のファイルの行末にファイルまたはコマンドを追加します。

何時間もこれをやろうとしました。

このデータを含むファイルがあります。これを 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/^ *//' )

ここで、プロセス置換は を<( ... )置き換えます-

関連情報