AWK для использования нескольких пробелов в качестве разделителя
Я использую команду ниже, чтобы присоединиться к двум файлам, используя первые два столбца.
awk 'NR==FNR{a[,]=substr(,3);next} (,) in a{print , a[,] > "br0102_3.txt"}' br01.txt br02.txt
теперь по умолчанию команда AWk использует пробелы в качестве разделителей. Но мой файл может содержать один пробел между двумя словами, например
1:ABCD TEXT1 TEXT2 123123112312312312312312312312312312
BCDEFG TEXT3TEXT4 133123123123123123123123123125423423
QWERT TEXT5TEXT6 123123123123125456678786789698758567
2:
ABCD TEXT1 TEXT2 12312312312312312312312312312
BCDEFG TEXT3TEXT4 31242342342342342342342342343
MNHT TEXT8 TEXT9 31242342342342342342342342343
мне нужен файл результатов как;
ABCD TEXT1 TEXT2 123123112312312312312312312312312312 12312312312312312312312312312
BCDEFG TEXT3TEXT4 133123123123123123123123123125423423 31242342342342342342342342343
QWERT TEXT5TEXT6 123123123123125456678786789698758567
MNHT TEXT8 TEXT9 31242342342342342342342342343
какие-то намеки ?
2 ответов
awk поддерживает регулярное выражение как значение FS
таким образом, вы можете указать регулярное выражение, которое соответствует по крайней мере двум пробелам. Что-то вроде -F '[[:space:]][[:space:]]+'
.
$ awk '{print NF}' File2
4
3
4
$ awk -F '[[:space:]][[:space:]]+' '{print NF}' File2
3
3
3
вы используете поля фиксированной ширины, поэтому вы должны использовать GNU awk FIELDWIDTHS (или аналогичные) для разделения полей, например, если 2-е поле-это 15 символов от char 8 до char 23 включительно в этом файле:
$ cat file
abc def ghi klm
AAAAAAAB C D E F G H IJJJJ
abc def ghi klm
$ awk -v FIELDWIDTHS="7 15 4" '{print "<" ">"}' file
<def ghi >
<B C D E F G H I>
< def ghi >
любое решение, которое полагается на определенное количество пробелов между полями, потерпит неудачу, если между полями есть 1 или ноль пробелов.
Если вы хотите очистить ведущие / конечные пробелы от ваших целевых полей:
$ awk -v FIELDWIDTHS="7 15 4" '{gsub(/^\s+|\s+$/,"",); print "<" ">"}' file
<def ghi>
<B C D E F G H I>
<def ghi>