ファイルが終了するまで、1つのファイルを2番目のファイルに追加します。

ファイルが終了するまで、1つのファイルを2番目のファイルに追加します。

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$0lOFS

答え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)

    これにより、内容がfile1awk変数に割り当てられます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

関連情報