【问题标题】:How to strip double quotes in this AWK single liner, and drop first record?如何在这个 AWK 单行中去掉双引号,并删除第一条记录?
【发布时间】:2013-01-04 21:34:50
【问题描述】:

试图在我的 AWK 代码中查找所有唯一制造商的列表。我已经成功地使用以下方法从 CSV 中提取它们并输出到换行符分隔的文本文件,以便将来 php 导入到 Magento:

awk 'BEGIN {FS=";";ORS="\n";}a[$33]++==0 {print $33}' ./rsrimport/IMPORT.csv >OUTPUT.txt

输出这个:

"manufacturer"
"5.11 Tactical"
"Advantage Arms"
"Advanced Armament Corp"
"Ultra Dot"
"American Classic"
"AccuSharp"
"Adams Arms"
"American Defense Mfg."
"Advanced Technology"
"A&G"
"Aimpoint"
""
"Arsenal, Inc."
"Allen"
"AmeriGlo"
"Apex Tactical Specialties"
"Armscor"
"Armalite"
"A.R.M.S., Inc."
"ASP"

我想做的有三点:

  1. 去掉双引号
  2. 删除第一行(即标题 来自文件)
  3. 删除所有空格(带“”的行)

为此苦苦挣扎了一段时间,并阅读了无数论坛。感谢您提供的任何帮助!

【问题讨论】:

  • 考虑用php做吗?
  • 其实那是我考虑的另一个途径。我正在考虑基于此提出后续问题。
  • file — 将整个文件读入一个数组,然后循环 str_replace for " (或者在本例中为 trim()) empty() 用于空行 $array[0] 用于第 1 行。我从不喜欢混合支持多种语言
  • 存在的问题是我需要遍历 CSV,提取第 33 个字段的唯一值,并将它们吸入数组。自从我直接编写 PHP 代码以来已经有很长时间了。当我吃完午饭回来时,我会发布 PHP 代码。
  • fgetcsv()\str_getcsv() 将是最好的起点

标签: php awk text-processing


【解决方案1】:

使用gsub 替换" 并使用if 条件。

{x=$33; gsub("\"","", x);  if(x && FNR!=1){print x;}}

http://ideone.com/36IwCx

【讨论】:

  • 根据您的输入,最终代码为:awk 'BEGIN {FS=";";ORS="\n";}a[$33]++==0 {b=$33; gsub("\"","", b); if(b && FNR!=1){print b;}}' ./rsrimport/IMPORT.csv >EXPORT.txt 必须将您的 a 变量更改为 b 变量,以免与第一个 a 变量发生冲突。
【解决方案2】:

试试这个

sed -re '1d;s/"//g; /^( \t)*$/ d' temp.txt

【讨论】:

    猜你喜欢
    • 2011-03-06
    • 2019-04-23
    • 2014-04-07
    • 1970-01-01
    • 1970-01-01
    • 2015-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多