2015-06-12 4 views
1

Я хочу форматировать ниже неформатированные входы. Я бы хотел напечатать все поля, если второй столбец начинается с «2».awk распечатать все colours отформатирован

Фактический файл содержит много столбцов. Есть ли простой способ распечатать все столбцы, а не печатать $2,$3,$4,$5,...$n?

Input.csv

--------------------------- 
|Data statistics|Number of| 
|-------------------------| 
|Records passed | 750,517| 
--------------------------- 
Transaction Data for Serial Numbers 

No of Records :              750517 

----------------------------------------------------------------------------------------------------------- 
|Material Number|Serial Number From |Serial Number To |Document Year|Delivery Document|Material Document| 
|---------------------------------------------------------------------------------------------------------- 
|200965   |18604165309338  |18604165309387  |2012   |6100202749  |AAA2778202  | 
|201163   |10740000822407  |10740000822606  |2012   |6100202749  |AAA2778202  | 
|2|18604177741067  |18604177741366  |2012   |6100202749  |AAA2778202  | 
|201295   |18604221522337  |18604221523836  |2012   |6100202749  |AAA2778202  | 
|201480   |18604113309952  |18604113310131  |2012   |6100202749  |AAA2778202  | 
|201781   |18604199150436  |18604199150835  |2012   |6100202749  |AAA2778202  | 
|201480   |6001400030046472 |6001400030046771 |2012   |6100202520  |AAA2777953  | 
|202853   |6001700000180323 |6001700000180722 |2012   |6100202520  |AAA2777953  | 
----------------------------------------------------------------------------------------------------------- 

Я unsing ниже команды:

awk ' BEGIN {FS ="|"; OFS = ","} { if ($2~"2") print $2,$3,$4,$5,$6,$7 }' Input.txt 

Желаемая Выход:

200965   ,18604165309338  ,18604165309387  ,2012   ,6100202749  ,AAA2778202  
201163   ,10740000822407  ,10740000822606  ,2012   ,6100202749  ,AAA2778202  
2,18604177741067  ,18604177741366  ,2012   ,6100202749  ,AAA2778202  
201295   ,18604221522337  ,18604221523836  ,2012   ,6100202749  ,AAA2778202  
201480   ,18604113309952  ,18604113310131  ,2012   ,6100202749  ,AAA2778202  
201781   ,18604199150436  ,18604199150835  ,2012   ,6100202749  ,AAA2778202  
201480   ,6001400030046472 ,6001400030046771 ,2012   ,6100202520  ,AAA2777953  
202853   ,6001700000180323 ,6001700000180722 ,2012   ,6100202520  ,AAA2777953 

ответ

4
$ awk 'gsub(/\|/,",") && gsub(/^,|,$/,"") && /^2/' file 
200965   ,18604165309338  ,18604165309387  ,2012   ,6100202749  ,AAA2778202 
201163   ,10740000822407  ,10740000822606  ,2012   ,6100202749  ,AAA2778202 
2,18604177741067  ,18604177741366  ,2012   ,6100202749  ,AAA2778202 
201295   ,18604221522337  ,18604221523836  ,2012   ,6100202749  ,AAA2778202 
201480   ,18604113309952  ,18604113310131  ,2012   ,6100202749  ,AAA2778202 
201781   ,18604199150436  ,18604199150835  ,2012   ,6100202749  ,AAA2778202 
201480   ,6001400030046472 ,6001400030046771 ,2012   ,6100202520  ,AAA2777953 
202853   ,6001700000180323 ,6001700000180722 ,2012   ,6100202520  ,AAA2777953 

Чтобы решить свой комментарий ниже:

$ awk 'gsub(/\|/,",") && gsub(/^,|,$/,"") && $3~/^,600/' file 
201480   ,6001400030046472 ,6001400030046771 ,2012   ,6100202520  ,AAA2777953 
202853   ,6001700000180323 ,6001700000180722 ,2012   ,6100202520  ,AAA2777953 

$ awk -F, 'gsub(/\|/,",") && gsub(/^,|,$/,"") && $3~/^600/' file 
201480   ,6001400030046472 ,6001400030046771 ,2012   ,6100202520  ,AAA2777953 
202853   ,6001700000180323 ,6001700000180722 ,2012   ,6100202520  ,AAA2777953 
+1

Спасибо Ed Morton – SVR

+1

Добро пожаловать. Если у вас есть другой вопрос, подумайте над созданным вами примером. В этом случае вы сказали, что вам нужны только строки, начинающиеся с «2», но ваш вход ТОЛЬКО содержит строки, начинающиеся с «2», поэтому не было ничего, чтобы протестировать их, чтобы убедиться, что потенциальное решение удовлетворяет этому требованию. Моя первая попытка вызвала ожидаемый вывод, который вы опубликовали из введенного вами примера, и это был @fedorqui, который заметил, что он фактически не работает, поскольку я игнорировал ваши «единственные строки, которые начинаются с 2». –

+1

Уверенный Эд Мортон, получил смысл, позаботится о будущих вопросах !!! – SVR

2

Вы можете сказать:

$ awk -F"|" -v OFS="," '$2~/^2/ {NF--; $0=$0; print}' file 
,200965   ,18604165309338  ,18604165309387  ,2012   ,6100202749  ,AAA2778202  
,201163   ,10740000822407  ,10740000822606  ,2012   ,6100202749  ,AAA2778202  
,2,18604177741067  ,18604177741366  ,2012   ,6100202749  ,AAA2778202  
,201295   ,18604221522337  ,18604221523836  ,2012   ,6100202749  ,AAA2778202  
,201480   ,18604113309952  ,18604113310131  ,2012   ,6100202749  ,AAA2778202  
,201781   ,18604199150436  ,18604199150835  ,2012   ,6100202749  ,AAA2778202  
,201480   ,6001400030046472 ,6001400030046771 ,2012   ,6100202520  ,AAA2777953  
,202853   ,6001700000180323 ,6001700000180722 ,2012   ,6100202520  ,AAA2777953  
+0

Следует упомянуть, что 'NF--; $ 0 = $ 0' будет работать только в некоторых awks. –

+1

Спасибо fedorqui – SVR

1

Это может помочь вам

$ cat file 
--------------------------- 
|Data statistics|Number of| 
|-------------------------| 
|Records passed | 750,517| 
--------------------------- 
Transaction Data for Serial Numbers 

No of Records :              750517 

----------------------------------------------------------------------------------------------------------- 
|Material Number|Serial Number From |Serial Number To |Document Year|Delivery Document|Material Document| 
|---------------------------------------------------------------------------------------------------------- 
|200965   |18604165309338  |18604165309387  |2012   |6100202749  |AAA2778202  | 
|201163   |10740000822407  |10740000822606  |2012   |6100202749  |AAA2778202  | 
|2|18604177741067  |18604177741366  |2012   |6100202749  |AAA2778202  | 
|201295   |18604221522337  |18604221523836  |2012   |6100202749  |AAA2778202  | 
|201480   |18604113309952  |18604113310131  |2012   |6100202749  |AAA2778202  | 
|201781   |18604199150436  |18604199150835  |2012   |6100202749  |AAA2778202  | 
|201480   |6001400030046472 |6001400030046771 |2012   |6100202520  |AAA2777953  | 
|202853   |6001700000180323 |6001700000180722 |2012   |6100202520  |AAA2777953  | 
----------------------------------------------------------------------------------------------------------- 

Выход

$ awk 's=$1~/^\|2/{gsub(/^\||\|$/,""); gsub(/\|/,",")}s' file 
200965   ,18604165309338  ,18604165309387  ,2012   ,6100202749  ,AAA2778202  
201163   ,10740000822407  ,10740000822606  ,2012   ,6100202749  ,AAA2778202  
2,18604177741067  ,18604177741366  ,2012   ,6100202749  ,AAA2778202  
201295   ,18604221522337  ,18604221523836  ,2012   ,6100202749  ,AAA2778202  
201480   ,18604113309952  ,18604113310131  ,2012   ,6100202749  ,AAA2778202  
201781   ,18604199150436  ,18604199150835  ,2012   ,6100202749  ,AAA2778202  
201480   ,6001400030046472 ,6001400030046771 ,2012   ,6100202520  ,AAA2777953  
202853   ,6001700000180323 ,6001700000180722 ,2012   ,6100202520  ,AAA2777953  
+0

Спасибо Akshay !!! – SVR

Смежные вопросы