Допустим, у меня есть 6 разных столбцов в текстовом файле (как показано ниже) ,
Таким образом, результат будет:
A1_B1_D1 C1 1_G_GG PP z_T_GG CC
Я пытался
cut -f 1,2,4 -d$'\t' 3, но это не то, что я хочу.
cut -f 1,2,4 -d$'\t' 3
Если вам нужно сохранить выравнивание столбцов, вы можете проверить длину комбинации полей 1, 2 и 4 и добавить один или два tab символа, если необходимо,
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
Пример вывода
Не могли бы вы попробовать следующее.
awk ' BEGIN{ OFS="\t" } { print $1"_"$2"_"$4,$3 } ' Input_file
Я пробовал код RavinderSingh13, и он имеет тот же вывод, что и мой, но я не совсем понимаю разницу, в любом случае, вот она:
awk -F ' ' '{print $1"_"$2"_"$4"\t"$3}' /path/to/file
Еще один 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 $
Это может работать для вас (GNU sed):
sed 's/^(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+.*/\1_\2_\4\t\3/' -E file
Использовать сопоставление с образцом и обратные ссылки.
\S+ означает один или несколько непробельных символов пробела.
\S+
\s+ означает один или несколько символов пробела.
\s+
\t представляет вкладку.
\t