A.csv (sep=",") ファイルがあります。
Date And Time of Export,Batch ID,Sample Name,Well,Sample Type,Status,Interpretive Result,Action*
07/15/20 19:10:03,TAQPATH-AB275013338-MOL_0003,2060565907,E11,Patient,VALID,SARS-CoV-2 Not Detected,REPORT
07/15/20 19:10:03,TAQPATH-AB275013338-MOL_0003,2060565919,A10,Patient,VALID,SARS-CoV-2 Not Detected,REPORT
07/15/20 19:10:03,TAQPATH-AB275013338-MOL_0003,2060565931,E01,Patient,VALID,SARS-CoV-2 Not Detected,REPORT
列4から「0」を削除したいのですが、数字[1-9]のみです。つまり、データが「B01」の場合は「B1」が必要ですが、データが「B10」の場合はそのままにしたいのです。 「B10」。私の例では、次のようになります。
Date And Time of Export,Batch ID,Sample Name,Well,Sample Type,Status,Interpretive Result,Action*
07/15/20 19:10:03,TAQPATH-AB275013338-MOL_0003,2060565907,E11,Patient,VALID,SARS-CoV-2 Not Detected,REPORT
07/15/20 19:10:03,TAQPATH-AB275013338-MOL_0003,2060565919,A10,Patient,VALID,SARS-CoV-2 Not Detected,REPORT
07/15/20 19:10:03,TAQPATH-AB275013338-MOL_0003,2060565931,E1,Patient,VALID,SARS-CoV-2 Not Detected,REPORT
私はそれを完了しました:
awk -F "," 'BEGIN{OFS=",";} {sub("0", "", $4); print}' A.csv > B.csv
ただし、「0」はすべて削除されます。誰にもアイデアはありますか?
ありがとう
ベストアンサー1
1つの方法は、最初の文字をバックアップし、次を0
使用して先行文字を含む部分を置き換えることです。sub()
awk -F "," 'BEGIN{ OFS="," } $4 ~ /^[[:alpha:]]/ { lead = substr($4, 1, 1); sub ("^[[:alpha:]]0*", lead, $4) }1' file
初期条件は、文字で始まる行$4 ~ /^[[:alpha:]]/
のみを表示します。$4
関数を使用してこの行の最初の数字のみを抽出し、substr()
最初sub()
から置換を使用し、すべての先行ゼロを使用してパターンを最初の文字にのみ置き換えます。
もう1つの方法は、最初のアルファベットの後の部分を強制的に数字の部分に変換して、+0
前のゼロを削除することです。
awk -F "," 'BEGIN{ OFS="," } $4 ~ /^[[:alpha:]]/ && NR > 1 { $4 = substr($4, 1, 1) "" substr($4, 2)+0 }1' file