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=""
}'