用特定字符填充行,直到它包含给定数量的字符

时间:2016-05-18 08:59:16

标签: bash file unix awk sed

我有各种平面文件,其中包含大约30k条记录,我需要使用脚本重新格式化以确保它们具有相同数量的public async Task<FileResult> ImagePath(string filePath) { HttpClientHandler handler = new HttpClientHandler() { UseDefaultCredentials = true, }; using (var client = new HttpClient(handler)) { client.BaseAddress = new Uri(apiUrl); client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("image/jpeg")); HttpResponseMessage fs = await client.GetAsync("cipap/api/baseapi/ImagePath?filePath=" + filePath); return File(fs.Content.ReadAsByteArrayAsync().Result, "image/jpeg"); } }

例如,下面是平面文件中的两个示例记录。第一条记录包含8~s,第二条记录包含10~s。

There are 2 Tasks in your question.
1. selecting values form drop down and 
2. validating options

 WebElement pooldropdown=driver.findElement(By.id("cpoolLabel"));
        Select sel = new Select(pooldropdown);
// ways to select values from drop-down
         sel.selectByValue(“10”);
         sel.selectByIndex(2);
         sel.selectByVisibleText(“SCNW_PERM”);

        List<WebElement> list =  sel.getOptions();
        System.out.println("Number of Pool items : "+list.size()); 

          for(int i =0; i>list.size() ; i++){
          System.out.println(list.get(i).getText());

          }

我需要两个记录都包含12个,所以我需要的代码将循环遍历每行的文件添加键以包含正确数量的〜。期望的结果如下。

~

我有以下一些代码,它们会显示每个文件中的〜的数量,但我确定如何从这里开始。

736~company 1~cp1~1~19~~08/07/1878~09/12/2015~
658~company 2~cp2~1~19~65.12~27/06/1868~22/08/2015~address line 1~address line 2~

4 个答案:

答案 0 :(得分:2)

将字段分隔符设置为~并继续添加~,直到您有足够的内容:

$ awk -F"~" -v cols=12 'NF<=cols{for (i=NF;i<=cols;i++) $0=$0 FS}1' file
736~company 1~cp1~1~19~~08/07/1878~09/12/2015~~~~~
658~company 2~cp2~1~19~65.12~27/06/1868~22/08/2015~address line 1~address line 2~~~

答案 1 :(得分:1)

awk -v FS='~' -v count=12 '{line = ""; for (i = 1; i <= count; i++) { line = line "~" $i } print line }' tildes.txt

答案 2 :(得分:1)

这是一个仅限bash内置解决方案:

a=~~~~~~~~~~~~;
while read -r line; do
  n=${line//[!~]};
  echo "$line${a/$n}";
done < file

解释

  • n=${l//[!~]}根据~中的所有$l个字符生成一个字符串。

  • ${a/$n}获取12 ~个字符的字符串并删除$n的第一个匹配项,因此当我们将其追加到$l时, 12在回声线中倾斜。

警告:如果file中的一行中有超过12个波浪号,则相应的输出行将有超过24个波浪号,因为没有检查以确保${#n}更少比${#a}

答案 3 :(得分:0)

$ awk -F"~" -v c=12 'BEGIN{OFS=FS;c++}{$c=$c}1' file
736~company 1~cp1~1~19~~08/07/1878~09/12/2015~~~~~
658~company 2~cp2~1~19~65.12~27/06/1868~22/08/2015~address line 1~address line 2~~~