Как я могу отключить первые n и последние n столбцов из файла с разделителями табуляции?
Я попробовал это, чтобы сократить первый столбец. Но я не собираюсь комбинировать первый и последний n столбцов
cut -f 1-10 -d "<CTR>v <TAB>" filename
Как я могу отключить первые n и последние n столбцов из файла с разделителями табуляции?
Я попробовал это, чтобы сократить первый столбец. Но я не собираюсь комбинировать первый и последний n столбцов
cut -f 1-10 -d "<CTR>v <TAB>" filename
Вырезание может принимать несколько диапазонов в -f:
Столбцы до 4 и от 7 до:
cut -f -4,7 -
или для полей 1,2,5,6 и от 10:
cut -f 1,2,5,6,10 -
и т.д.
Чтобы использовать AWK для отключения первого и последнего полей:
awk '{$1 = ""; $NF = ""; print}' inputfile
К сожалению, это оставляет разделители полей, поэтому
aaa bbb ccc
становится
[space]bbb[space]
Для этого используйте ответ kurumi, который не оставит лишних пробелов, но таким образом, который соответствует вашим требованиям:
awk '{delim = ""; for (i=2;i<=NF-1;i++) {printf delim "%s", $i; delim = OFS}; printf "\n"}' inputfile
Это также устраняет пару проблем в этом ответе.
Чтобы обобщить это:
awk -v skipstart=1 -v skipend=1 '{delim = ""; for (i=skipstart+1;i<=NF-skipend;i++) {printf delim "%s", $i; delim = OFS}; printf "\n"}' inputfile
Затем вы можете изменить количество полей, чтобы пропустить в начале или конце, изменив назначения переменных в начале команды.
Вы можете использовать Bash для этого:
while read -a cols; do echo ${cols[@]:0:1} ${cols[@]:1,-1}; done < file.txt
вы можете использовать awk, например, отключить 1-й, 2-й и 3-й столбцы
awk '{for(i=3;i<=NF-3;i++} print $i}' file
если у вас есть язык программирования, такой как Ruby (1.9 +)
$ ruby -F"\t" -ane 'print $F[2..-3].join("\t")' file
Попробуйте следующее:
echo a#b#c | awk -F"#" '{$1 = ""; $NF = ""; print}' OFS=""