我已将三列复制到文件中,但需要更改一列的格式(地图)。
getSelected()
输出文件如下:
listView = (SwipeListView) findViewById(R.id.listview);
loadAdapter = new LoadAdapter(getApplicationContext(),array_list);
listView.setAdapter(loadAdapter);
det.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String str = "";
str = loadAdapter.getSelected();
Toast.makeText(RelationShipChartList.this, str, Toast.LENGTH_SHORT).show();
}
复制数据后,我尝试使用以下命令分隔所有列:
echo "copy admin.product (my_references, id, my_date) to 'updateProductStatement.cql';" > copyInputs.cql
我得到这样的输出:
,4.IM-H-506X,2016-01-01 11:07:27-0500
['LOWERCASETEST7'],JASONTEST7,2015-04-19 00:00:00-0400
"['EPROSP_IWS', '648099_EPROSP_IWS']",4.NDR-IWS-EPRO,2015-04-16 08:04:21-0400
在这里,我想以 sed "s/' *, *'/' '/g;s/\([^,]*\),\([^,]*\),\(.*\)/update table set cola = \1 where colb = \2 and colc = \3/;s/' '/','/g" tempFile > updatestmt.cql
的第一列格式插入此格式的内容。
所以我期望的输出文件看起来像:
update table set cola = where colb = E2Bn9 and colc = 2015-04-29 00:00:00-0500
update table set cola = ['2C173'] where colb = E2BA8 and colc = 2015-04-29 00:00:00-0500
update table set cola = "['5A475' where colb = '2C174'] and colc = E2BA8
任何帮助或消化?我对脚本世界非常陌生。
答案 0 :(得分:1)
试试这个:
sed "s/^\(\"*\[[^]]*\]\"*\)\(.*\)/{\1:\"\"}\2/" file
使用文件:
,4.IM-H-506X,2016-01-01 11:07:27-0500
['LOWERCASETEST7'],JASONTEST7,2015-04-19 00:00:00-0400
"['EPROSP_IWS', '648099_EPROSP_IWS']",4.NDR-IWS-EPRO,2015-04-16 08:04:21-0400
输出:
,4.IM-H-506X,2016-01-01 11:07:27-0500
{['LOWERCASETEST7']:""},JASONTEST7,2015-04-19 00:00:00-0400
{"['EPROSP_IWS', '648099_EPROSP_IWS']":""},4.NDR-IWS-EPRO,2015-04-16 08:04:21-0400
答案 1 :(得分:1)
由于其功能splitting by content,我通常更喜欢使用gawk
(与sed
相比)来解析csv
类型数据。
$ cat test.data
,4.IM-H-506X,2016-01-01 11:07:27-0500
['LOWERCASETEST7'],JASONTEST7,2015-04-19 00:00:00-0400
"['EPROSP_IWS', '648099_EPROSP_IWS']",4.NDR-IWS-EPRO,2015-04-16 08:04:21-0400
$ gawk '$1{$1="{"$1":\"\"}"; NF}1' FPAT='("[^"]*")|([^,]*)' OFS=, test.data
,4.IM-H-506X,2016-01-01 11:07:27-0500
{['LOWERCASETEST7']:""},JASONTEST7,2015-04-19 00:00:00-0400
{"['EPROSP_IWS', '648099_EPROSP_IWS']":""},4.NDR-IWS-EPRO,2015-04-16 08:04:21-0400
答案 2 :(得分:0)
你只为你的3行输入显示一行输出,所以如果这对你想要与我们分享的行完全符合你想要的但是这可能是你想要的:
$ cat tst.awk
BEGIN { FS=OFS="," }
{
cola = $0
sub(/(,[^,]+){2}$/,"",cola)
print "{" cola ":\"\"}", $(NF-1), $NF
}
$
$ awk -f tst.awk file
{:""},4.IM-H-506X,2016-01-01 11:07:27-0500
{['LOWERCASETEST7']:""},JASONTEST7,2015-04-19 00:00:00-0400
{"['EPROSP_IWS', '648099_EPROSP_IWS']":""},4.NDR-IWS-EPRO,2015-04-16 08:04:21-0400
以上内容建立在前一个问题的@LászlóSzilágyi's answer之上 - 你真的应该接受这个问题的答案,因为它是最清晰,最简单的,并且随着你的需求变化而显然是微不足道的。
在GNU sed顺便说一下,你只需输出上面的输出:
$ sed -r 's/(.*)((,[^,]+){2})$/{\1:""}\2/' file
{:""},4.IM-H-506X,2016-01-01 11:07:27-0500
{['LOWERCASETEST7']:""},JASONTEST7,2015-04-19 00:00:00-0400
{"['EPROSP_IWS', '648099_EPROSP_IWS']":""},4.NDR-IWS-EPRO,2015-04-16 08:04:21-0400
但是我怀疑这不是你想要做的事情,如果你想为第一个字段的第一行做一些不同的东西,它就不像修改的awk脚本那么微不足道空的或在第一个字段周围没有双引号的第二行。