我有一个类似下面的txt文件
008 750 16.3763 1
028 572 -91.1915 2
031 421 -19.2564 1
113 265 -5.05956 1
147 099 38.017 1
154 161 -4.43984 1
170 101 28.2171 1
179 728 -31.2691 2
我想根据第四列中的值分隔第三列: 如果第四列为1,则将另外两列插入“(第三列的值)NA”,如果为2,则将其设为“NA(第三列的值)”,然后删除第三列和第四列。我会得到
008 750 16.3763 NA
028 572 NA -91.1915
031 421 -19.2564 NA
113 265 -5.05956 NA
147 099 38.017 NA
154 161 -4.43984 NA
170 101 28.2171 NA
179 728 NA -31.2691
我认为快速的方法是用NA替换第四列,如果值为1.如果是2,则切换第三列和第四列,然后用NA替换2。
awk '{OFS="\t";if($i==1) $i="NA"; print}' *.txt
但我不知道如何切换两列的值。
谢谢! :)
答案 0 :(得分:0)
"如果值为1则将第四列替换为NA,如果为2, 切换第三和第四列,然后用NA"
替换2
试试这个:
$4==1{$4="NA"}
1
如果第四列是NA
,那么我们将其设置为$4==2{$4=$3; $3="NA"}
。
2
如果第四列是NA
,那么我们将第四列等于第三列,然后用1
替换第三列。
{print}
这是用于打印线的awk简洁速记。如果你不喜欢神秘,你可以改用OFS='\t'
。
awk -F'\t' '$4==1{$4="NA"} $4==2{$4=$3; $3="NA"} 1' OFS='\t' 1.txt
这会将输出中的字段分隔符设置为选项卡。
如果输入上的字段分隔符是选项卡,那么您可能还需要指定:
column -t
上面使用tab作为字段分隔符,这意味着列不允许很好地排列。要解决此问题,我们可以使用$ awk '$4==1{$4="NA"} $4==2{$4=$3; $3="NA"} 1' OFS='\t' 1.txt | column -t
008 750 16.3763 NA
028 572 NA -91.1915
031 421 -19.2564 NA
113 265 -5.05956 NA
147 099 38.017 NA
154 161 -4.43984 NA
170 101 28.2171 NA
179 728 NA -31.2691
:
$prod = mysql_query("SELECT * FROM tblproduct WHERE id = ".$_POST['pid'],$db_con); //$db_con must be your database connection
if(!$prod) { die("Database query failed: " . mysql_error()); } //always check if your query is properly done.
$pname = "";
while ($row = mysql_fetch_array($prod)) {
$pname = $row["name"]; }
答案 1 :(得分:0)
$ awk '{ if ($4==1) {$4="NA"} else {$4=$3; $3="NA"} }1' file | column -t
008 750 16.3763 NA
028 572 NA -91.1915
031 421 -19.2564 NA
113 265 -5.05956 NA
147 099 38.017 NA
154 161 -4.43984 NA
170 101 28.2171 NA
179 728 NA -31.2691