他の列のデータに基づいて列を操作するためのawk / sedフィルタの例

他の列のデータに基づいて列を操作するためのawk / sedフィルタの例

列2と5のデータが「null」と等しくない場合は、sedまたはawkを効率的に使用して特定の列(列1など)のcsvデータを操作する方法の例を見つけようとします。

フィルタリングされていない例:

埋められていない、空、データ、データ、空、データ
無人島、データ、データ、データ、データ,データ
無人島、データ、データ、データ、空、データ
埋められていない、空、データ、データ、空、データ
埋められない、空、データ、データ、データ,データ

になります:

埋められていない、空、データ、データ、空、データ
人口が密集したデータ、データ、データ、データ,データ
無人島、データ、データ、データ、空、データ
埋められていない、空、データ、データ、空、データ
埋められない、空、データ、データ、データ,データ
助けてくれてありがとう!

答え1

awk 'BEGIN{ FS=OFS="," }
$2!="NULL" && $5!="NULL"{$1="POPULATED"}1' infile.csv

FSは入力です。F生産するS区切り記号とOFS酸素出力F生産するS区切り文字、両方ともコンマ文字で設定します。スタート入力ファイルを処理する前にNINGを実行してください。

私たちはこれら2つの列(column#2$2とcolumn#5 $5)を持っています無効値)!="NULL"最初の列の値を更新して$1="POPULATED"からイディオム1最後に、すべての変更が適用された入力行が出力されます。

空の列に対してNULLを意味する場合は、次のように空の文字列と比較してください。

awk 'BEGIN{ FS=OFS="," }
$2!="" && $5!=""{$1="POPULATED"}1' infile.csv

答え2

#!/usr/bin/python
k=open('filepath','r')
for i in k:
    gsplit=i.strip().split(',')
    if (gsplit[1] != "NULL"  and gsplit[4] !="NULL"):
        jk="POPULATED"
        print jk+","+",".join(gsplit[1:])
    else:
        print i.strip()

出力

UNPOPULATED,NULL,DATA,DATA,NULL,DATA
POPULATED,DATA,DATA,DATA,DATA,DATA
UNPOPULATED,NULL,DATA,DATA,NULL,DATA
UNPOPULATED,NULL,DATA,DATA,NULL,DATA
POPULATED,DATA,DATA,DATA,DATA,DATA

関連情報