結果:

結果:

基本から始まる数字、1つ以上のスペース、ファイル名(パスを含む)を含むファイルがあります。ファイル名とパスにはスペースを含めることもできます。

awk別々のファイルでこれらのフィールド間の同一性をさらにテストするときは、別のコンポーネントを使用したいと思います。

最初の問題を扱うファイルは次のとおりです。

111  aaa/aaa
222  b b/bbb
333  ccc/c c
444  d d/d d

出力を見たいです。

aaa/aaa 111
b b/bbb 222
ccc/c c 222
d d/d d 222

ここで重要なのは、上記の出力形式ではなく、これらの変数を設定した後に式で使用できる機能などです$1。これには1つのファイルしかありませんが、実際には2セットのファイルを比較していますが、まずこのコンポーネントを理解する必要があります。$2$3awk

$1行の先頭には英数字のシーケンスを含める必要があり、ファイル $2名なしでフルパスを含め、 $3ファイル名のみを含める必要があります。

プログラム中に変更しようとしましたが、FSこれは起こりませんでした。

$ awk 'BEGIN{OFS=" || "}{FS=" ";a[$1]=1;FS="/";b[$NF]=1;print $1, $2, $NF}' file1
111 || dir1/a || aa
222 dir1 || bbb || bbb
333 dir1 || c cc || c cc
444 dir1 || ddd || ddd
555 dir2 || e ee || e ee
666 dir2 || fff || fff
999 dir2 || zzz || zzz

FSスラッシュが削除されただけでなく、最初の変数も2番目の変数のみを使用するため、間違っています。FS

ベストアンサー1

なぜこれを行うのかはわかりませんが、(たとえば)明示的な空白区切り文字を保存して削除してから、代替区切り$1文字を使用して残りの部分を分割できます。たとえば、

$ awk '
   {
      a=$1; $1=""; sub(/^ */,""); 
      n=split($0,p,"/"); 
      $1=a; for(i=1;i<=n;i++) $(i+1) = p[i]
   } {
     print $2"/"$3, $1
   }' file
aaa/aaa 111
b b/bbb 222
ccc/c c 333
d d/d d 444

おすすめ記事