" 1"
ファイルの各行の末尾に文字列を追加する必要があります。次の2つのコマンドを実行すると、空のファイルが生成されます。
awk '{ print $0 " 1" }' < file.txt > file.txt
使用sed
sed 's/$/ 1/' file.txt > file.txt
ここで試してみると、どのようなエラーが発生しますか?アドバイスしてもらえますか? Mac端末でこのコマンドを実行しています。
答え1
GNUsed
ソリューションにはインライン編集が必要です-i
。
sed -i 's/$/ 1/' file.txt
(BSDの場合sed
必要sed -i ''
)
awk
この問題を解決するには一時ファイルを使用する必要があります。
awk '{ print $0 " 1" }' file.txt > tmp && mv tmp file.txt
実際にはsed
一時ファイルも生成されますが、-i
ファイルが処理されることもあります。
問題は次のとおりですawk '{ print $0 " 1" }' < file.txt > file.txt
。
リダイレクトはawk
制御権を取得する前に行われます。> file.txt
ファイルが切り捨てられます。端末でこれを試してください。
>file
file
ファイルに以前の内容があってもサイズは0になります。したがって、awk
このファイルからデータを読み取ることはできません。のような問題ですsed
。
\r
改行文字を使用した最終的な解決策:
perl -pi -e 's/\r\n|\n|\r/ 1\n/g' file.txt