在Unix中剪切特定列并使用分隔符折叠
假设我在一个文本文件中有6个不同的列(如下所示) 我想提取第一列、第二列和第四列,因为A1_B1_D1一起折叠,第三列由tab分隔 因此,结果将是:在Unix中剪切特定列并使用分隔符折叠,unix,awk,sed,cut,Unix,Awk,Sed,Cut,假设我在一个文本文件中有6个不同的列(如下所示) 我想提取第一列、第二列和第四列,因为A1_B1_D1一起折叠,第三列由tab分隔 因此,结果将是: A1_B1_D1 C1 1_G_GG PP z_T_GG CC 我试过了 cut-f1,2,4-d$'\t'3,但这不是我想要的 你能试试下面的吗 awk ' BEGIN{ OFS="\t" } { print $1"_"$2"_"$4,$3 } ' Input_file 你能试试下面的吗 awk ' BE
A1_B1_D1 C1
1_G_GG PP
z_T_GG CC
我试过了
cut-f1,2,4-d$'\t'3
,但这不是我想要的 你能试试下面的吗
awk '
BEGIN{
OFS="\t"
}
{
print $1"_"$2"_"$4,$3
}
' Input_file
你能试试下面的吗
awk '
BEGIN{
OFS="\t"
}
{
print $1"_"$2"_"$4,$3
}
' Input_file
如果需要保持列对齐,可以检查字段1、2和4组合的长度,并根据需要添加一个或两个
tab
字符
awk '{
printf (length($1"_"$2"_"$4) >= 8) ? "%s_%s_%s\t%s\n" : "%s_%s_%s\t\t%s\n",
$1,$2,$4,$3
}' file
示例输出
A1_B1_D1 C1
1_G_GG PP
z_T_GG CC
如果需要保持列对齐,可以检查字段1、2和4组合的长度,并根据需要添加一个或两个
tab
字符
awk '{
printf (length($1"_"$2"_"$4) >= 8) ? "%s_%s_%s\t%s\n" : "%s_%s_%s\t\t%s\n",
$1,$2,$4,$3
}' file
示例输出
A1_B1_D1 C1
1_G_GG PP
z_T_GG CC
我尝试过RavinderSingh13代码,它的输出与我的相同,但我不太清楚两者的区别,总之,它是:
awk-F'{print$1”\u“$2”\u“$4”\t“$3}'/path/to/file
我尝试过RavinderSingh13代码,它的输出与我的相同,但我不太清楚区别,总之,它是:
awk-F'{print$1“\u“$2”\u“$4”\t“$3}'/path/to/file
这可能适合您(GNU-sed):
使用模式匹配和反向引用
\S+
表示一个或多个非空白字符
\s+
表示一个或多个空白字符
\t
表示一个选项卡。这可能适用于您(GNU-sed):
使用模式匹配和反向引用
\S+
表示一个或多个非空白字符
\s+
表示一个或多个空白字符
\t
表示一个选项卡。另一个awk并使用列-t进行格式化
$ cat cols_345.txt
A1 B1 C1 D1 E1 F1
1 G PP GG HH GG
z T CC GG FF JJ
$ awk -v OFS="_" '{ $3="\t"$3; print $1,$2,$4 $3 } ' cols_345.txt | column -t
A1_B1_D1 C1
1_G_GG PP
z_T_GG CC
$
另一个awk,使用列-t进行格式化
$ cat cols_345.txt
A1 B1 C1 D1 E1 F1
1 G PP GG HH GG
z T CC GG FF JJ
$ awk -v OFS="_" '{ $3="\t"$3; print $1,$2,$4 $3 } ' cols_345.txt | column -t
A1_B1_D1 C1
1_G_GG PP
z_T_GG CC
$
这是因为我将OFS值设置为制表符,而您正在打印时手动将制表符放在值之间。@Augusto:OFS:输出字段分隔符,默认为空格。这是因为我将OFS值设置为制表符,而您正在打印时手动将制表符放在值之间。@Augusto:OFS:输出字段分隔符,默认为空格。