use*_*825 4 command-line bash pipe text-processing
我将输出重定向到一个文件中,然后得到如下信息:
| id | code | color_code |
-------+------+------------+
|11A00B| 15 | 9129102 |
|11A00C| 16 | 9129103 |
(2 rows)
| id | code | color_code |
-------+------+------------+
|11B00B| 25 | 9129152 |
|11B00C| 36 | 9129162 |
(2 rows)
| id | code | color_code |
-------+------+------------+
|11C00B| 22 | 9129107 |
|11C00C| 9 | 9129108 |
(2 rows)
Run Code Online (Sandbox Code Playgroud)
如何将其转换为 csv 样式,例如:
| id | code | color_code |
|11A00B| 15 | 9129102 |
|11A00C| 16 | 9129103 |
|11B00B| 25 | 9129152 |
|11B00C| 36 | 9129162 |
|11C00B| 22 | 9129107 |
|11C00C| 9 | 9129108 |
Run Code Online (Sandbox Code Playgroud)
为了获取第一个文件,循环运行并启动 sql 脚本。我所做的只是> file。但我无法控制循环。可能信息已经在迭代过程中被过滤了。但这是相当值得怀疑的。
awk:
awk 'NR==1; /^\|[0-9]/'
Run Code Online (Sandbox Code Playgroud)
中的默认操作awk是打印记录
NR==1 匹配第一条记录(行)
/^\|[0-9]/匹配任何|以数字开头的记录
例子:
% cat file.txt
| id | code | color_code |
-------+------+------------+
|11A00B| 15 | 9129102 |
|11A00C| 16 | 9129103 |
(2 rows)
| id | code | color_code |
-------+------+------------+
|11B00B| 25 | 9129152 |
|11B00C| 36 | 9129162 |
(2 rows)
| id | code | color_code |
-------+------+------------+
|11C00B| 22 | 9129107 |
|11C00C| 9 | 9129108 |
(2 rows)
% awk 'NR==1; /^\|[0-9]/' file.txt
| id | code | color_code |
|11A00B| 15 | 9129102 |
|11A00C| 16 | 9129103 |
|11B00B| 25 | 9129152 |
|11B00C| 36 | 9129162 |
|11C00B| 22 | 9129107 |
|11C00C| 9 | 9129108 |
Run Code Online (Sandbox Code Playgroud)
您可以通过以下sed命令管道输出:
sed '1p;/^|/!d;/^|\s*id/d'
Run Code Online (Sandbox Code Playgroud)
解释:
1p只是呼应了第一行。/^|/!d删除任何不以 开头的行|。/^|\s*id/d删除任何以 开头的行|,然后删除一些(或没有)空白字符,然后是id。我们已经使用第一个表达式打印了我们的标题,所以现在这个表达式丢弃它是可以的。| 归档时间: |
|
| 查看次数: |
318 次 |
| 最近记录: |