Как я могу использовать 'awk' для разделения текста в столбце?

Как я могу извлечь первый столбец (первый столбец в"")

"xxxxx1" {685a}
"xx2" {bcdd}
"xx3 gsdd" {29a6ff}
"sdsdf xxx" {243b9}
"sdfsdf ccc dd" {c28f2f}
"dsdsf sfsdf" {216e}
"sdfsdfsd" {48530}
"sdfsdff" {9d2afa0n}
"sdfsdfdff sdfs" {d8681a}
"sdfsdsds sdfsdf d" {5b9b8}
"sdfsdfs sdf sdfsdf" {68e08a}
"sdfsdfsdf sdf" {107fa0}

что я хочу иметь, поскольку результат - это:

"xxxxx1"
"xx2"
"xx3 gsdd"
"sdsdf xxx"
"sdfsdf ccc dd"
"dsdsf sfsdf"
"sdfsdfsd"
"sdfsdff"
"sdfsdfdff sdfs"
"sdfsdsds sdfsdf d"
"sdfsdfs sdf sdfsdf"
"sdfsdfsdf sdf"

какая-либо идея?

5
задан 19 May 2017 в 01:39

4 ответа

Используйте ​ { (пространство, фигурная скобка) как разделитель полей, так как Вы не заботитесь о втором поле:

$ awk -F ' {' '{print $1}' foo
"xxxxx1"
"xx2"
"xx3 gsdd"
"sdsdf xxx"
"sdfsdf ccc dd"
"dsdsf sfsdf"
"sdfsdfsd"
"sdfsdff"
"sdfsdfdff sdfs"
"sdfsdsds sdfsdf d"
"sdfsdfs sdf sdfsdf"
"sdfsdfsdf sdf"
11
ответ дан 23 November 2019 в 08:41

Если бы Вы просто хотите все между первым и последним " символ двойной кавычки каждой строки, большая часть простого решения, вероятно, была бы этим, с помощью grep вместо awk:

grep -o '".*"' FILENAME

Эти -o переключатель позволяет grep произвести только части соответствия вместо целой строки, которая содержит соответствие. (Единственно заключенный в кавычки, для предотвращения интерпретации оболочки) шаблон ".*" соответствия последовательность любого символа (.) с любой длиной (*), включая нуль, который окружается двойными кавычками.

3
ответ дан 23 November 2019 в 08:41

Как альтернатива muru's awk решение.

использование cut:

cut -f 1 -d { < file.txt

использование grep:

grep -o '".*"' file.txt

или

grep -o \".*\" file.txt

использование sed:

sed -r 's/(".*").*/\1/' file.txt

или

sed -r 's/\{.*\}//' file.txt

или даже:

sed 's/{.*//'
2
ответ дан 23 November 2019 в 08:41

Perl с группировкой (.*) может сделать это также:

$ perl -pe 's/"(.*)".*/"\1"/g' input.txt                                                    
"xxxxx1"
"xx2"
"xx3 gsdd"
"sdsdf xxx"
"sdfsdf ccc dd"
"dsdsf sfsdf"
"sdfsdfsd"
"sdfsdff"
"sdfsdfdff sdfs"
"sdfsdsds sdfsdf d"
"sdfsdfs sdf sdfsdf"
"sdfsdfsdf sdf"

прием здесь - то, что мы соответствуем целой строке и используем "(.*)" для обработки всего между двойными кавычками как одна группа. Мы заменяем ту целую строку группой, которой мы соответствовали путем обращения к ней через \1 часть.

1
ответ дан 23 November 2019 в 08:41

Другие вопросы по тегам:

Похожие вопросы: