
2つのファイルがあります。最初のものは数字だけです。この数字は毎回計算され変更されます。 2番目のファイルには複数の列があり、行数がわかりません(変更可能)。たとえば、次のようなものがあります。
ファイル1:
12
ファイル2:
1 2 3
4 5 6
7 8 9
私の考えでは
1 2 3 12
4 5 6 12
7 8 9 12
私の考えはあなたができるwhile not EOF
ことcat File 1
ですFile 2
。どうすればいいですか?
答え1
その他awk
:
$ awk 'BEGIN{getline l <"file1"};{print $0, l}' file2
1 2 3 12
4 5 6 12
7 8 9 12
BEGIN
ブロックは、入力ファイルを読み取る前に最初に実行されます。最初の行は関数をfile1
使用して検索され、getline()
変数に格納されます。l
- の各行について、デフォルトでは空白で区切ってその内容を一緒に印刷します
file2
。$0
l
OFS
答え2
awkを使う
$ awk -v n=$(cat file1) '{print $0,n}' file2
1 2 3 12
4 5 6 12
7 8 9 12
csh
/ でtcsh
以下を試してください。
awk -v n=`cat file1` '{print $0,n}' file2
どのように動作しますか?
-v n=$(cat file1)
これにより、内容が
file1
awk変数に割り当てられますn
。print $0,n
これにより、次の各行が印刷されます
n
。
sedを使う
$ sed '1{h;d}; G;s/\n/ /' file1 file2
1 2 3 12
4 5 6 12
7 8 9 12
どのように動作しますか?
1{h;d}
最初に読み込まれた行は、予約済みスペースに保存され、そのパターンスペースから削除されます(したがって印刷されません)。
G; s/\n/ /
すべての後続の行に対してgetコマンドを使用します
G
。パターンスペースに改行文字と予約済みスペースが追加されます。次に改行文字を空白に置き換えます。
答え3
これはうまくいきます(この場合はfile2が更新されます。必要でない場合は-iフラグを削除してください)。
sed -i "s/.*/& $(cat file1)/" file2
答え4
恋人のためsed
- 読むファイル1各行にファイル2これは良い考えではありません。変数を使用する方が良いです。
my_var=$(<file1) ; sed "s/$/ $my_var/" file2
またはより安全
read -r my_var <file1 ; sed "s/$/ $my_var/" file2