awkスクリプトの実行後の文字列の切り捨て

Nov 23 2020

私はこのコードを持っています

BEGIN { FS=OFS=";" }
{ key = $(NF-1) } NR == FNR { for (i=1; i<(NF-1); i++) { if ( !seen[key,$i]++ ) {
            map[key] = (key in map ? map[key] OFS : "") $i } } next } { print $0 map[key] }

私はこのようにコードを使用します

awk -f tst.awk 2.txt 1.txt

2つのテキストファイルがあります

1 .txt

AA;BB;

2 .txt

CC;DD;BB;AA;

私は、この生成しようと3 .TXT出力を

AA;BB;CC;DD;

しかし、このスクリプトは返すだけなので、このスクリプトでは不可能です AA;BB;

ロジック:上記は、配列インデックスのハッシュルックアップでリテラル文字列を使用するだけなので、入力に含まれる文字は関係ありません。しかし、サンプルの出力について:
であれば2 .txtの共通フィールドがでもある1例.txt.forBB;AA;あなたが一列にそれらを連結する必要が、すなわちAA;BB;CC;DD;注文は、例えば、必要とされていない出力がある場合は関係ありませんBB;AA;DD;CC;
で唯一の条件重複を避ける必要がありますが、私のスクリプトはすでにこれを行っています

回答

1 RavinderSingh13 Nov 23 2020 at 08:33

OPのコメントによると、両方のファイルに1行しかないので、フォローしてみてください。したがって、pasteコマンドを使用して両方のファイルを結合し、awkコマンドでその出力を処理します。

paste -d';' 1.txt 2.txt | 
awk '
BEGIN{
  FS=OFS=";"
}
{
  for(i=1;i<=NF;i++){
    if(!seen[$i]++){ val=(val?val OFS:"")$i }
  }
  print val
  delete seen
  val=""
}'