Bash, показать содержимое третьего столбец текстового файла, при условии, что в первых двух столбцах есть пустые ячейки

Рейтинг: 0Ответов: 4Опубликовано: 25.08.2023

Пример файла my_file.txt:

A B C
  D E
F   G 

Я хочу получить:

C
E
G 

Что пробовал:

cut -d' ' -f3 my_file1.txt
awk '{print $3}' my_file.txt

В файле в пустых местах пробел, он же и использутеся, как разделитель, в результате чего ответ получается не тот что я хочу. Пробую через регулярные выражения, но пока без успешно.

Помогите найти решение.

Ответы

▲ 3

Если всего 3 столбца, то

awk '{print $NF}'

выводит последний столбец, в данном случае 3. На твоем примере работает.

▲ 0

Может что-то такое?

$ cat table.txt 
First Second Third
1     2      3
      22     33
111          333
             Only-Third
No    Third
E     N      D

$ cat table.txt | cut -c 14-
Third
3
33
333
Only-Third

D
▲ 0

В файле в пустых местах пробел, он же и использутеся, как разделитель

В значениях пробелы, столбцы одинаковые

в третьем столбы string разной длины

допустим у нас есть таблица из трёх столбцов где разделителем значений выступает один пробел, кроме последнего столбца, где в значении также могут встречаться пробелы. Если значение пусто то оно заменяется на один пробел. пример таблицы

A B C 1
  D E 2 2
F    
  G  
H   I 3 3 3
    J 4 4 4 4

нужно вывести последний(третий) столбец

S='_'; cat FILE |awk '{print " "$0}' |sed "s/  / $S/g" |cut -d' ' -f 4- |tr "$S" ' '

где переменная S это временный односимвольный "заменитель" для пустого поля, этот символ не должен встречаться в таблице, _ можно заменить на другой символ.

на выходе получим:

C 1
E 2 2
 
 
I 3 3 3
J 4 4 4 4
▲ 0

Для вашего примера работает такой алгоритм:

$ cat f
A B C
  D E
F   G

$ sed 's/   / , /g;s/  /, /g' f | awk '{if($1 ~ "," || $2 ~ ",")print $3}'
E
G

Сначала sed'ом переделываем 3-е и 2-е пробелы в соотв. комбинации с например "," затем awk'ом проверяем если 1-й или 2-й столбец содержат "," выводим 3-й столбец.