xargsコマンドで2つのファイル列を変数として使用する

xargsコマンドで2つのファイル列を変数として使用する

awk/xargs の学習中に一部のファイルの名前を変更しようとします。私は2つの列を持つファイルを提供するコマンドを管理しました。最初の列は名前を変更したいファイルの名前、2番目の列はファイルを終了する必要がある名前です。
ファイルの内容をどのように分割しますか(好ましくはawk / xargsなどのプログラムを使用)。各列を変数として使用

注文する

echo "foto1.JPG
foto2.JPG
foto3.JPG" | \
gawk '{ count++ }{ print $0 " " strftime("%y-%m-%d") "_" count ".JPG" }'  

出力

foto1.JPG 21-11-09_1.JPG                                                
foto2.JPG 21-11-09_2.JPG
foto3.JPG 21-11-09_3.JPG

これが私が欲しいのですが、その結果をどのように分離して活用するのかわかりません。頑張った

echo "foto1.JPG
foto2.JPG
foto3.JPG" | \                                                          
gawk '{ count++ }{ print $0 " " strftime("%y-%m-%d") "_" count ".JPG" }' | \
xargs -I% echo renaming $(echo % | awk '{ print $1 }') to $(echo % | awk '{ print $2 }') "..."

しかし、それは出力

renaming foto1.JPG 21-11-09_1.JPG to ...                                                      
renaming foto2.JPG 21-11-09_2.JPG to ...
renaming foto3.JPG 21-11-09_3.JPG to ...

これが私と衝突する理由は

echo renaming $(echo foo bar | awk '{ print $1 }') to $(echo foo bar | awk '{ print $2 }') "..."

私にください

renaming foo to bar ...

そして

echo "foto1.JPG
foto2.JPG
foto3.JPG" | \
gawk '{ count++ }{ print $0 " " strftime("%y-%m-%d") "_" count ".JPG" }' | \
xargs -I% echo this line has % in it

出力

this line has foto1.JPG 21-11-09_1.JPG in it
this line has foto2.JPG 21-11-09_2.JPG in it
this line has foto3.JPG 21-11-09_3.JPG in it

%usingステートメントの内部に問題があるようです$( ... )

ベストアンサー1

-IAFAIKの一部として渡されたプレースホルダの内容を分割することはできません。ここで個々の引数を処理するには、シェルコンテキストを導入する必要があります。

xargs -L1 sh -c 'renaming "$1" to "$2"' "$0"

このフラグは、-L1パイプで接続された出力の複数行を一度に1つずつ取得し、内容を実行し、行全体を引数として渡します。xargssh -c '..'


しかし、一意の行番号を追跡するために別の変数は必要ありませんcounter。 awkは、NR次のように使用できる変数の現在の行番号を更新しました。

gawk '{ print $0 " " strftime("%y-%m-%d") "_" NR ".JPG" }'

おすすめ記事