我有一个文件 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
一种方法是备份第一个字符并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()
从头开始替换和所有前导零,并仅用第一个字符替换该模式。
另一种方法是强制将第一个字母表之后的部分转换为数字部分+0
,这将去掉前导零
awk -F "," 'BEGIN{ OFS="," } $4 ~ /^[[:alpha:]]/ && NR > 1 { $4 = substr($4, 1, 1) "" substr($4, 2)+0 }1' file