我已经做了大量的搜索,但是找不到我需要的东西。有一个这样的文件:
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
Log.d(TAG, "onKeyUp: "+keyCode);
if(!mPaused && keyCode==KeyEvent.KEYCODE_BACK){
if(!mScript.onBackPressed())
return true;
}
return super.onKeyUp(keyCode, event);
}
我想要做的是使用awk或其他东西从此文件返回行,并更改为字段4(管道分隔)。 Field 4有一个代字号和插入符作为分隔符,这是我正在努力的地方。我们希望返回的行如下:
aaa|bbb|ccc|ddd~eee^fff^ggg|hhh|iii
111|222|333|444~555^666^777|888|999
AAA|BBB|CCC||EEE|FFF
如果字段4为空,则按原样返回。但是当字段4有多个值时,我们希望仅在波形符返回后的第一个值。
答案 0 :(得分:1)
awk -F "[|^~]" 'BEGIN{OFS="|"}NF==6{print} NF==9{print $1,$2,$3,$5,$8,$9}' tmp.txt
aaa|bbb|ccc|eee|hhh|iii
111|222|333|555|888|999
AAA|BBB|CCC||EEE|FFF
使用正则表达式作为分隔符
计算字段以决定做什么
将输出分隔符设置为管道
答案 1 :(得分:0)
~
此方法不对字段4以外的字段内容进行假设。例如,其他字段可能包含^
或-F'|'
个字符,但不会影响结果。
|
这会将输入的字段分隔符设置为sub(/^[^~]*~/, "", $4)
。
~
如果字段4包含~
,则会删除第一个~
以及第一个sub(/\^.*/, "", $4)
之前的所有内容。
^
如果字段4包含^
,则会删除第一个1
及其后的所有内容。
OFS='|'
这是用于打印线的awk简洁速记。
|
这会将输出中的字段分隔符设置为<?php
class Entity {
/**
* @var array|stdClass|Collection|string
**/
private $mixed;
public function getMixedAsPhpArray(array $filter) {
return EntityHelper::toPhpArray($this->mixed, $filter);
}
}
。