私は次のような問題を持って、私は次のように見えます、タブで区切られた大規模なCSV形式のいくつかの行を抽出する必要があります。タブで区切られたcsvをフィルタリングする方法は?
organe organ hkl0094508 g67 1 LBNhkl23 AcorFive sentiment PENDLEorFON WOOLEN MIL REWS Managed Services LBEAN 1-800-SFFA-CALL N
organe organ hkl0968175377 g67 1 GNSFORJL AcorFive sentiment NesorF Labs for JL . . . N
organe organ hkl099999 g67 1 INorFEL385 AcorFive sentiment FRYS REWS Managed Services B2B orFech SuppororF 916-356-1234 N
organe organ hkl108860 g67 1 INorFEL976 ACorFIVE sentiment RYOYO . . . . . . N
アイデアは特定と2番目の列に一致する行だけを抽出することですリスト:
hkl0968175377
hkl0094508
次のように私が試した拳のアプローチは、AWKを使用していた: 私はCtrlを押しながらVを押して、verbatinモードでタブを入力しています、
awk -F " " 'FNR==NR{seen[$1]; next} $2 in seen' patterns original_list > new_list
私が作るとき:私は克服するためにどんな提案をお願いしたいと思います
organe organ hkl0968175377 g67 1 GNSFORJL AcorFive sentiment NesorF Labs for JL . . . N
organe organ hkl0094508 g67 1 LBNhkl23 AcorFive sentiment PENDLEorFON WOOLEN MIL REWS Managed Services LBEAN 1-800-SFFA-CALL N
:
$ wc -l new_list
0 new_list
私は0のラインを持って、私の所望の出力は、次の2行でnew_listという名前のアーカイブになりますこの状況。
awk -F '\t' 'FNR==NR{seen[$1]=1; next} seen[$2]' patterns original_list > new_list
短い方法ですそれ:
あなたの入力ファイルとコードがあなたが指定した通りであれば、期待どおりの出力が得られます。したがって、ファイルをデバッグするには、スクリプト内のprintステートメントを追加してFS、$ 1を最初のファイルから、2番目のファイルから$ 2をデリミタで印刷します。 'printf" <%s> \ n "、$ 1'。 –
フィールドセパレータが正しいとは思わない。 '-F '+''(2つ以上のスペース)で試してください – karakfa
また、データ(またはスクリプト)がWindows OSシステムを通過した場合は、 '\ r \ n'という行末がある可能性があります。 'dos2unix data1.txt data2.txt .... myScript.sh ....'を実行してそれらを整理します。各ファイルは '\ n'専用のバージョンに置き換えられます。がんばろう。 – shellter